#include <xen/config.h>
#include <xen/lib.h>
-#undef memmove
-void *memmove(void *dest, const void *src, size_t n)
-{
- int d0, d1, d2;
-
- if ( dest < src )
- return memcpy(dest, src, n);
-
- __asm__ __volatile__ (
- " std ; "
- " rep ; movsb ; "
- " cld "
- : "=&c" (d0), "=&S" (d1), "=&D" (d2)
- : "0" (n), "1" (n-1+(const char *)src), "2" (n-1+(char *)dest)
- : "memory");
-
- return dest;
-}
-
#undef memcpy
void *memcpy(void *dest, const void *src, size_t n)
{
return s;
}
+
+#undef memmove
+void *memmove(void *dest, const void *src, size_t n)
+{
+ int d0, d1, d2;
+
+ if ( dest < src )
+ return memcpy(dest, src, n);
+
+ __asm__ __volatile__ (
+ " std ; "
+ " rep ; movsb ; "
+ " cld "
+ : "=&c" (d0), "=&S" (d1), "=&D" (d2)
+ : "0" (n), "1" (n-1+(const char *)src), "2" (n-1+(char *)dest)
+ : "memory");
+
+ return dest;
+}
#ifndef _X86_64_STRING_H_
#define _X86_64_STRING_H_
-#define __HAVE_ARCH_MEMMOVE
-#define memmove(dest,src,n) (__memmove((dest),(src),(n)))
-#define __memmove(dest,src,n) (__builtin_memmove((dest),(src),(n)))
-
#define __HAVE_ARCH_MEMCPY
#define memcpy(t,f,n) (__memcpy((t),(f),(n)))
#define __memcpy(t,f,n) (__builtin_memcpy((t),(f),(n)))
#define memset(s, c, count) (__memset((s),(c),(count)))
#define __memset(s, c, count) (__builtin_memset((s),(c),(count)))
+/* Some versions of 64-bit gcc don't have this built in. */
+#define __HAVE_ARCH_MEMMOVE
+extern void *memmove(void *dest, const void *src, size_t n);
+
#endif